public SubEvent getSubEventValues(DateTime startDate, DateTime endDate, double xHr, List<TimeSeries> lstData)
{
    int startIdx = clsUtlts.getIdxFromList(lstData, startDate);
    int endIdx = clsUtlts.getIdxFromList(lstData, endDate);
    
    int timeStep = Convert.ToInt32((lstData[1].valTStamp - lstData[0].valTStamp).TotalMinutes);
    int nTimeStep = Convert.ToInt32((xHr * 60) / timeStep);

    // Sliding window scan to find max-volume period
    (double max, int start, int end) =
        clsUtlts.SlidingWindowMax(lstData, startIdx, endIdx, nTimeStep);

    return new SubEvent(max, lstData[start].valTStamp, lstData[end].valTStamp);
}